export default {
  namespaced: true,
  state: () => ({
    // 购物车数组
    // 每个商品的信息对象，都包含如下 6 个属性：
    // { goods_id, goods_name, goods_price, goods_count, goods_small_logo, goods_state }
    cart: JSON.parse(uni.getStorageSync('cart') || '[]'),
   
  }),
  
  
  mutations: {
    addToCart(state, goods) {
      const findResult = state.cart.find(x => x.goods_id === goods.goods_id)
      if (!findResult) {
        state.cart.push(goods)
      } else {
        findResult.goods_count++
      }
      this.commit('m_cart/saveToStorage')
    },
    saveToStorage(state) {
      uni.setStorageSync('cart', JSON.stringify(state.cart))
    },
    // 更新购物车商品的勾选状态
    updateGoodsState(state, goods) {
      const findResult = state.cart.find(x => x.goods_id === goods.goods_id)
      if(findResult){
        findResult.goods_state=goods.goods_state
            this.commit('m_cart/saveToStorage')
      }
    },
    updateGoodsCount(state,goods){
      // 根据id查找商品
      const findResult=state.cart.find(x=>x.goods_id===goods.goods_id)
      if(findResult){
        findResult.goods_count=goods.goods_count
        this.commit('m_cart/saveToStorage')
      }
    },
    removeGoodsById(state,goods){
      // 过滤，只留下原数据中商品id不等于传入的商品id的项目
      state.cart=state.cart.filter(x=>x.goods_id!==goods.goods_id)
      this.commit('m_cart/saveToStorage')
    },
     updateAllGoodsState(state,newState){
       state.cart.forEach(x=>x.goods_state=newState)
        this.commit('m_cart/saveToStorage')
     }
      },
  getters: {
    total(state) {
      let c = 0
      state.cart.forEach(x => c += x.goods_count)
      return c
    },
    checkedCount(state){
      // 计算所有goods_state为true的项的goods_count总和
            return state.cart.reduce((total, item) => {
              if (item.goods_state) {
                total += item.goods_count
              }
              return total
            }, 0)
    },
     totalCheckedPrice(state) {
          return state.cart.reduce((total, item) => {
            if (item.goods_state) {
              total += (item.goods_count+0) * (item.goods_price+0);
            }
            return total;
          }, 0).toFixed(2);// 使用 toFixed(2) 将结果转换为两位小数的字符串
        },
  }
}